package com.common.ssm.sql.service;


import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * sql公共类
 *
 * @author 张森
 * @date 2020-09-04
 */
public interface MakerwitSqlService {
    /**
     * TODO 增(insert)
     */
    /**
     * 根据添加 map 新增tabName数据
     * @param tabName
     * @param columns
     * @return
     */
    int insertTabNameByColumns(@Param("tabName")String tabName,@SuppressWarnings("rawtypes") @Param("columns")Map columns);
    /**
     * 批量新增
     * @param tabName 表名
     * @param list Map集合 map的key是字段名 value是字段值
     * @param flag true空值参与插入 false空值不参与
     * @return
     */
    @SuppressWarnings("rawtypes")
    int insertBatch(String tabName, List<Map> list,boolean flag);
    //TODO 增 sqlbuilder
    //TODO 增 .xml
    //TODO 增 注解



    /**
     * TODO 删(delete)
     */
    //TODO 删 sqlbuilder
    /**
     * 根据where map 删除tabName数据
     * @param tabName 删除数据表名
     * @param where 条件map
     * @return
     */
    int deleteTabByWhereMap(@Param("tabName")String tabName,@SuppressWarnings("rawtypes") @Param("where")Map where);
    //TODO 删 .xml
    //TODO 删 注解



    /**
     * TODO 改(update)
     */
    //TODO 改 sqlbuilder
    /**
     * 根据修改set与条件where map 修改tabName数据
     * @param tabName
     * @param set
     * @param where
     * @return
     */
    int updateTabBySetWhereMap(@Param("tabName")String tabName, @SuppressWarnings("rawtypes") @Param("set")Map set, @SuppressWarnings("rawtypes") @Param("where")Map where);
    //TODO 改 .xml
    //TODO 改 注解



    /**
     * TODO 查(select)
     */
    //TODO 查 sqlbuilder
    /**
     * 通过表名、id获取表数据  id=0获取全表数据
     * @param c javabean class
     * @param tabName 表名
     * @param id
     * @return 返回javabean 集合
     */
    List<?> selectById(Class<?> c,String tabName,int id);

    /**
     * 通过条件Map 查询所需数据
     * @param tabName 表名
     * @param where Map条件 key与表中字段名一致 支持like、>、>=、<、<=、模糊查询： like %查询内容% 、in (查询内容)
     * @return 精确查询出Map的list集合
     */
    List<Map<String, Object>> select(String tabName, Map where);
//    MakerwitBean where = MakerwitBean.create().set("ID", "in (".concat(ids).concat(")"));
//    List<Map<String, Object>> allotpost = ms.select("u_allot_post", where);
    // = > < >= <=   表面 字段名 符号 字段值   支持>、>=、<、<=、=
    List<Map<String, Object>> selectwhere(String tabName,String key, String symbol,String value);
    // in 子查询                            支持 模糊查询：like %查询内容%
    List<Map<String, Object>> selectwherein(String tabName,String key, String value);
    // like 子查询                          支持 in (查询内容)
    List<Map<String, Object>> selectwherelike(String tabName,String key, String value);
    /**
     * 通过条件Map 查询所需数据 并通过指定字段排序
     * @param tabName 表名
     * @param where Map条件 key与表中字段名一致 支持like、>、>=、<、<=、模糊查询： like %查询内容% 、in (查询内容)
     * @param sortKey 需要排序字段
     * @return
     */
    List<Map<String, Object>> selectsc(String tabName, Map where,String sortKey);

    //TODO 查 .xml
    //TODO 查 注解


}
